package com.ibeetl.admin.aod.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 日期格式转换工具
 * <p>
 * Created by yaoshuhong on 2018/3/20.
 */
public class DateUtils {

    public static final String FORMAT_DATE_TIME = "yyyy-MM-dd HH:mm:ss";
    public static final String FORMAT_DATE = "yyyy-MM-dd";
    public static final String FORMAT_DATE_NOT_BAR = "yyyyMMdd";
    public static final String FORMAT_TIME = "HH:mm:ss";

    /**
     * 将日期格式化为指定的格式
     *
     * @param date   要格式的日期
     * @param format 要格式化的格式
     * @return 格式化后的字符串
     */
    public static String format(Date date, String format) {
        if (null == date) {
            return "";
        }
        DateFormat dateFormat = new SimpleDateFormat(format);
        return dateFormat.format(date);
    }

    /**
     * 将日期格式化为"yyyyMMdd"的格式
     *
     * @param date 要格式的日期
     * @return 格式化后的字符串
     */
    public static String formatToDateNotBar(Date date) {
        return format(date, FORMAT_DATE_NOT_BAR);
    }

    /**
     * 将日期格式化为"yyyy-MM-dd HH:mm:ss"的格式
     *
     * @param date 要格式的日期
     * @return 格式化后的字符串
     */
    public static String formatToDateTime(Date date) {
        return format(date, FORMAT_DATE_TIME);
    }

    /**
     * 将日期格式化为"yyyy-MM-dd"的格式
     *
     * @param date 要格式的日期
     * @return 格式化后的字符串
     */
    public static String formatToDate(Date date) {
        return format(date, FORMAT_DATE);
    }

    /**
     * 将日期格式化为"HH:mm:ss"的格式
     *
     * @param date 要格式的日期
     * @return 格式化后的字符串
     */
    public static String formatToTime(Date date) {
        return format(date, FORMAT_TIME);
    }

    /**
     * 将指定的格式的字符串转义成Date对象,如果格式错误,会跑出RuntimeException异常
     *
     * @param date   要转义的日期字符串
     * @param format 日期字符串的格式
     * @return 转义后的Date对象
     */
    public static Date parse(String date, String format) {
        try {
            DateFormat dateFormat = new SimpleDateFormat(format);
            return dateFormat.parse(date);
        } catch (Exception e) {
            throw new RuntimeException("日期格式化错误", e);
        }
    }

    /**
     * 将"yyyy-MM-dd HH:mm:ss"格式的字符串转义成Date对象,如果格式错误,会跑出RuntimeException异常
     *
     * @param date 要转义的日期字符串
     * @return 转义后的Date对象
     */
    public static Date parseToDateTime(String date) {
        return parse(date, FORMAT_DATE_TIME);
    }

    /**
     * 将"yyyy-MM-dd"格式的字符串转义成Date对象,如果格式错误,会跑出RuntimeException异常
     *
     * @param date 要转义的日期字符串
     * @return 转义后的Date对象
     */
    public static Date parseToDate(String date) {
        return parse(date, FORMAT_DATE);
    }

    /**
     * 将"HH:mm:ss"格式的字符串转义成Date对象,如果格式错误,会跑出RuntimeException异常
     *
     * @param date 要转义的日期字符串
     * @return 转义后的Date对象
     */
    public static Date parseToTime(String date) {
        return parse(date, FORMAT_TIME);
    }

    /**
     * 将"yyyyMMdd"格式的字符串转义成Date对象,如果格式错误,会跑出RuntimeException异常
     *
     * @param date 要转义的日期字符串
     * @return 转义后的Date对象
     */
    public static Date parseToTimeNotBar(String date) {
        return parse(date, FORMAT_DATE_NOT_BAR);
    }

    /**
     * 通过时间秒毫秒数判断两个时间的间隔
     * @param date1
     * @param date2
     * @return
     */
    public static int differentDaysByMillisecond(Date date1, Date date2) {
        return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000*3600*24)));
    }

}
